import axios from 'axios';
import store from '../store';
import { Message, MessageBox } from 'element-ui';
import { getToken } from './baseinfo';
import { fork } from '../utils/fork';

// 创建axios的实例
const service = axios.create({
  baseURL: 'http://localhost:80', // 基本请求路径
  // baseURL: 'http://1.117.116.53:80', // 基本请求路径
  timeout: 10000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // // 请求携带token
    const token = getToken();
    // if(token == null || token == undefined || token == '') {
    //   Message({
    //     message: '未登录，请重新登录',
    //     type: 'error',
    //     duration: 5 * 1000,
    //   });
    //   throw new Error()
    // }
    config.headers['token'] = token;

    if (config.method.toLocaleLowerCase() === 'get') {
      if (config.data !== undefined) {
        console.log('config data');
        console.log(config.data);
        config.params = fork(config.data);
        Reflect.deleteProperty(config, 'data');
      }
    }

    return config;
  },
  (error) => {
    console.log(error);
    Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const result = response.data;
    if (result.code === 200) {
      Message({
        message: result.data.tips,
        type: 'error',
        duration: 5 * 1000,
      });

      return Promise.reject('error');
    }

    // 50008:非法的Token,50014:Token过期
    if (result.code === 50008 || result.code === 50014) {
      MessageBox.confirm(
        '你已被登出，可以取消继续留在该页面，或者重新登录',
        '确定登出',
        {
          type: 'warning',
          confirmButtonText: '确认登录',
          cancelButtonText: '取消',
        }
      ).catch(() => {
        Message({
          type: 'success',
          message: '用户取消登录',
        });
      });

      return Promise.reject('error');
    }

    return response.data;
  },

  (error) => {
    console.log('err1' + error);
    Message({
      type: 'error',
      message: error.message,
      duration: 5 * 1000,
    });

    return Promise.reject(error);
  }
);

// 导出axios对象
export default service;

export const scope = (scopeName) => {
  return (url) => {
    return url
      ? `${scopeName}${url.slice(0, 1) === '/' ? url : `/${url}`}`
      : `${scopeName}`;
  };
};
